package com.yixia.system.service.impl.system;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yixia.system.mapper.system.SysDictDataMapper;
import com.yixia.system.service.system.SysDictDataService;
import com.yixia.common.constant.UserConstants;

import com.yixia.common.core.domain.AjaxResult;
import com.yixia.common.core.domain.entity.SysDictData;
import com.yixia.common.utils.DictUtils;
import com.yixia.common.utils.StringUtils;
import com.yixia.common.utils.page.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* @author 35038
* @description 针对表【sys_dict_data(字典数据表)】的数据库操作Service实现
* @createDate 2023-07-17 21:43:43
*/
@Service
public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDictData>
    implements SysDictDataService {



    @Autowired
    private SysDictDataMapper dictDataMapper;


    @Override
    public AjaxResult selectDictDataPage(PageBean pageBean, SysDictData dictData) {

        /*1、创建查询条件*/
        LambdaQueryWrapper<SysDictData> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(StringUtils.isNotEmpty(dictData.getDictType()), SysDictData::getDictType, dictData.getDictType());
        queryWrapper.like(StringUtils.isNotEmpty(dictData.getDictLabel()), SysDictData::getDictLabel, dictData.getDictLabel());
        queryWrapper.eq(StringUtils.isNotEmpty(dictData.getStatus()), SysDictData::getStatus, dictData.getStatus());
        queryWrapper.orderByAsc(SysDictData::getDictSort);
        /*3.创建查询的page*/
        Page<SysDictData> page = new Page<>(pageBean.getPageNum(), pageBean.getPageSize());

        /*4.进行分页查询*/
        Page<SysDictData> pageResult = this.page(page, queryWrapper);

        /*7.进行数据的返回*/
        AjaxResult ajax = AjaxResult.success();
        ajax.put("data", pageResult.getRecords());
        ajax.put("total", pageResult.getTotal());/*总记录数*/
        return ajax;
    }

    /**
     * 新增保存字典数据信息
     *
     * @param dictData 字典数据信息
     * @return 结果
     */
    @Override
    public int insertDictData(SysDictData dictData) {
        /*直接将数据进行插入*/
        int row = dictDataMapper.insert(dictData);
        /*插入成功后清除缓存*/
        if (row > 0)
        {
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dictData.getDictType());
            DictUtils.setDictCache(dictData.getDictType(), dictDatas);
        }
        return row;
    }

    /**
     * 修改字典数据信息
     *
     * @param dictData 字典数据
     * @return 结果
     */
    @Override
    public int updateDictData(SysDictData dictData) {
        int row = dictDataMapper.updateById(dictData);
        if (row > 0)
        {
            /*更新缓存*/
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dictData.getDictType());
            DictUtils.setDictCache(dictData.getDictType(), dictDatas);
        }
        return row;
    }


    /**
     * 批量删除
     * @param dictCodes 需要删除的字典数据ID
     */
    @Override
    public void deleteDictDataByDictCodes(Long[] dictCodes) {
        for (Long dictCode : dictCodes)
        {
            SysDictData data = getById(dictCode);
            dictDataMapper.deleteById(dictCode);
            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
            DictUtils.setDictCache(data.getDictType(), dictDatas);
        }
    }

    /**
     * 标签名称的唯一
     * @param dictData 字典数据
     */
    @Override
    public boolean checkDictLabelUnique(SysDictData dictData) {
        Long dictCode = StringUtils.isNull(dictData.getDictCode()) ? -1L : dictData.getDictCode();
        SysDictData info = dictDataMapper.checkdictLabelUnique(dictData.getDictLabel(), dictData.getDictType());
        if (StringUtils.isNotNull(info) && info.getDictCode().longValue() != dictCode.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    /**
     * 检验值的唯一
     * @param dictData 字典数据
     * @return 结果
     */
    @Override
    public boolean checkDictValueUnique(SysDictData dictData) {
        Long dictCode = StringUtils.isNull(dictData.getDictCode()) ? -1L : dictData.getDictCode();
        SysDictData info = dictDataMapper.checkdictValueUnique(dictData.getDictValue(), dictData.getDictType());
        if (StringUtils.isNotNull(info) && info.getDictCode().longValue() != dictCode.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }
}




